perm filename PROJCT.DOC[0,BGB] blob sn#071769 filedate 1973-11-13 generic text, type T, neo UTF8
00100	THE PERSPECTIVE PROJECTION
00200	
00300	
00400	Given a three dimensional representation of some objects and the desire
00500	to have a realistic looking two dimensional image of those 
00600	objects the process of making the image involves Perspective Projection.
00700	
00800	In Nature the Perspective Projection was discovered one billion years
00900	ago with the evolution of the first animals with eyes.  It is surprising
01000	that the eyes of verbrates and inverbrates are so similair inspite
01100	of the fact that the differentiation of animals into those with and
01200	those without backbones occured before sight.
01300	
01400	In Art the Perspective Projection was discovered and pursued by
01500	the painters of Northern Italy about four hundred years ago.
01600	
01700	The invention of the telescope, camera  obscura and the microscope
01800	were contempories with  the artistic discovery of perspective.
01900	However film for the camera wasn't invented until the  early
02000	nineteenth century.
     

00100	The Image Plane.
00200		Let's insist that the desired image is flat, painting
00300		a perspective image on a dome is a problem for another day.
00400	The Lens Center.
00500		Let's insist that the image desired is similair to the image
00600		formed by a thin circular convex converging lens.
00700		Other classes of lens and images are possible but are 
00800		not going to be discussed here.  Of Particular irrelevance
00900		are the images formed by four by four matrices in the
01000		Projective Geometry.
01100	The Window.
01200		The image to be formed is Finite and Rectangular.
01300		And the four line segments which discribed the rectangle
01400		of the image are formally called the window and informally
01500		but more accurately the frame or border of the image.
     

00100	In computer graphics and vision the process of Perspective Projection
00200	depends greatly on WHAT is being projected.  Knowing how to project
00300	a point into an image is nice but it doesn't readily lead
00400	to an efficient algorithm for projecting line segments, polygons and
00500	polyhedrons.
00600	
00700	The major difficulty lies in `Clipping' the object down to that
00800	portion of it that is in view.
00900	
01000	At first encounter Clipping may seem to be a minor nuisance
01100	like Arithmetic Overflow that can be avoided rather than
01200	dealt with, however there appear to be only two ways
     

00100	α PROJECT PERSPECTIVE OF ALL THE VERTICES;
00200		FOREACH B|BεALBODY DO
00300		FOREACH V|BV⊗B≡V DO
00400	BEGIN	"PROJECT VERTEX"
00500		REAL X,Y,Z,XX,YY,ZZ;
00600		INTEGER IX,IY;
00700		X	←	∂(V)[1]  -  C[4,1];			α TRANSLATION;
00800		Y	←	∂(V)[2]  -  C[4,2];
00900		Z	←	∂(V)[3]  -  C[4,3];
01000		XX	←	X*C[1,1] + Y*C[2,1] + Z*C[3,1];		α ROTATION;
01100		YY	←	X*C[1,2] + Y*C[2,2] + Z*C[3,2];
01200		ZZ	←	X*C[1,3] + Y*C[2,3] + Z*C[3,3];
01300		IF ZZ  ≤  -FOCAL THEN
01400	BEGIN
01500		∂(V)[4]	←	-XX*SX/ZZ;		α PERSPECTIVE IN FRONT OF THE IMAGE PLANE;
01600		∂(V)[5]	←	-YY*SY/ZZ;
01700		∂(V)[6]	←	SZ/ZZ;
01800	END ELSE
01900	BEGIN
02000		∂(V)[4]	←	XX;			α CAMERA COORDINATES BEHIND THE IMAGE PLANE;
02100		∂(V)[5]	←	YY;
02200		∂(V)[6]	←	ZZ+FOCAL;
02300	END;
02400	END	"PROJECT VERTEX";